package com.ep.thirdPlatformProject.oa.service;

import com.ep.thirdPlatformProject.dhg.entity.DhgEmployeeEntity;
import com.ep.thirdPlatformProject.oa.entity.OAUserEntity;
import weaver.hrm.webservice.DepartmentBean;
import weaver.hrm.webservice.SubCompanyBean;
import weaver.hrm.webservice.UserBean;

/**
 * 人力资源管理服务
 *
 * @author Karl
 * @date 2024/05/28
 */
public interface HrmResourceService {

    /**
     * 通过代码获取HRM服务职位id
     *
     * @param code 代码
     * @return {@link String }
     */
    String getHrmServiceJobTitleIdByCode(String code);


    /**
     * 通过代码获取人力资源管理服务sum公司
     *
     * @param code 代码
     * @return {@link String }
     */
    String getHrmServiceSubCompanyByCode(String code);

    /**
     * 通过代码获取HRM服务部门
     *
     * @param code 代码
     * @return {@link String }
     */
    String getHrmServiceDepartmentByCode(String code);

    /**
     * 通过代码获取人力资源管理服务emp信息
     *
     * @param code 代码
     * @return {@link String }
     */
    UserBean getHrmServiceEmpInfoByCode(String code);


    /**
     * 获取所有子公司列表
     *
     * @return {@link SubCompanyBean[] }
     */
    SubCompanyBean[] getAllSubCompanyList();


    /**
     * 获取所有部门列表
     *
     * @return {@link DepartmentBean[] }
     */
    DepartmentBean[] getAllDepartmentList();

    /**
     * 获取所有员工信息
     *
     * @return {@link UserBean[] }
     */
    UserBean[] getAllEmpInfo();


    /**
     * 同步HRM资源
     *
     * @return {@link String }
     */
    String syncHrmResource(OAUserEntity entity);


    /**
     * 第一步 保存员工信息
     *
     * @return {@link UserBean }
     */
    UserBean firstSaveOAUser(DhgEmployeeEntity entity);


    /**
     * 同步公司
     *
     * @return {@link String }
     */
    String syncHrmCompany(String fullXmlStr);


    /**
     * 同步部门
     *
     * @return {@link String }
     */
    String syncDepartment(String fullXmlStr);


    /**
     * 在变更组织列表中查找代码
     *
     * @param orgCode 组织代码
     */
    @Deprecated
    void findCodeInChangeOrgList(String orgCode, OAUserEntity oaUserEntity);


    /**
     * 按代码比较部门完整路径，如果异常就抛出异常并且发送邮件
     *
     * @param deptCode 部门代码
     * @return 如果无误，返回部门全路径
     */
    String compareFullPathByCode(String deptCode);

}
